#include <iostream>
#include <signal.h>
#include <cstdio>
#include <cstdio>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>



using namespace std;



void Count(int time)
{
    while(time)
    {
        cout << endl;
        printf("time: %2d\r", time--);
        fflush(stdout);
        sleep(1);
    }
}
// volatile int quit = 0;

// void Handler(int signo)
// {
//     cout << "收到了信号" << signo << endl;
//     // Count(10);
//     cout << "quit:" << quit;
//     quit = 1;
//     cout << "-> quit:" << quit << endl;

// }


void CHLDHandler(int signo)
{
    cout << "收到了子进程的退出信号" << signo <<  endl;
    pid_t id;
    while(id = waitpid(-1, nullptr, WNOHANG) > 0)
    {
        cout << "wait child process:" << id << "exit success" << endl;
    }
    cout << "child is quit " << "pid:" << getpid() << endl;
    
}


int main()
{
    // struct sigaction sa;
    // sa.sa_flags = 0;
    // sigaddset(&sa.sa_mask, 3);
    // sa.sa_handler = Handler;
    // //sa.sa_sigaction = nullptr;
    // //sa.sa_restorer = nullptr;

    // struct sigaction osa;

    // sigaction(SIGINT, &sa, &osa);


    // while(true)
    // {
    //     cout << "我正在运行" << endl;
    //     sleep(1);
    // }






    // signal(2, Handler);
    // while(!quit);
    // cout << "我是正常退出的" << endl;


    //signal(SIGCHLD, CHLDHandler);
    signal(SIGCHLD, SIG_IGN);

    cout << "我是父进程" << "pid: " << getpid() << " ppid: " << getppid() << endl;
    pid_t id = fork();
    if(id == 0)
    {
        printf("我是子进程pid: %d, ppid: %d, 我要退出了\n", getpid(), getppid());
        Count(10);
        exit(2);
    }
    while(true) sleep(1);

    return 0;
}